package com.senven.books.utils;

/**
 * @author : longshengyi
 * @description :
 * @createDate : 2024/7/21 16:43
 */
public class ResultVOUtil<T> {

    public static ResultVO SAVE_SUCCESS = success("操作成功");

    /**
     * 操作成功
     *
     * @param code   code
     * @param msg    提示信息
     * @param object 对象
     */
    public static ResultVO success(Integer code, String msg, Object object) {
        ResultVO<Object> resultVo = new ResultVO<>();
        resultVo.setMsg(msg);
        resultVo.setCode(code);
        resultVo.setData(object);
        return resultVo;
    }

    /**
     * 操作成功
     *
     * @param msg    提示信息
     * @param object 对象
     */
    public static ResultVO success(String msg, Object object) {
        ResultVO<Object> resultVo = new ResultVO<>();
        resultVo.setMsg(msg);
        resultVo.setCode(ResultEnum.SUCCESS.getCode());
        resultVo.setData(object);
        return resultVo;
    }

    /**
     * 返回数据
     *
     * @param t
     * @return
     */
    public static <T> ResultVO<T> data(T t) {
        ResultVO<T> resultVo = new ResultVO<>();
        resultVo.setCode(ResultEnum.SUCCESS.getCode());
        resultVo.setMsg(ResultEnum.SUCCESS.getMsg());
        resultVo.setData(t);
        return resultVo;
    }

    /**
     * 操作成功，使用默认的提示信息
     *
     * @param object 对象
     */
    public static ResultVO success(Object object) {
        String message = ResultEnum.SUCCESS.getMsg();
        return success(message, object);
    }

    /**
     * 操作成功，返回提示信息，不返回数据
     */
    public static ResultVO success(String msg) {
        Object object = null;
        return success(msg, object);
    }

    /**
     * 操作成功，不返回数据
     */
    public static ResultVO success() {
        return success("操作成功");
    }

    /**
     * 操作有误
     *
     * @param code 错误码
     * @param msg  提示信息
     */
    public static <T> ResultVO<T> error(Integer code, String msg) {
        ResultVO<T> resultVo = new ResultVO<>();
        resultVo.setMsg(msg);
        resultVo.setCode(code);
        return resultVo;
    }

    /**
     * 操作有误
     *
     * @param resultEnum
     * @return
     */
    public static <T> ResultVO<T> error(ResultEnum resultEnum) {
        ResultVO<T> resultVo = new ResultVO<>();
        resultVo.setMsg(resultEnum.getMsg());
        resultVo.setCode(resultEnum.getCode());
        return resultVo;
    }

    /**
     * 操作有误，
     *
     * @param msg 提示信息
     */
    public static <T> ResultVO<T> error(String msg) {
        Integer code = ResultEnum.ERROR.getCode();
        return error(code, msg);
    }

    /**
     * 操作有误，使用默认400错误码
     *
     * @param msg 提示信息
     */
    public static <T> ResultVO<T> fail(String msg) {
        Integer code = ResultEnum.FAIL.getCode();
        return error(code, msg);
    }

}
